# 说明这个函数后续的操作会涉及到对 TravelInfo 模型对应的数据库表进行查询等操作，
# TravelInfo 应该是预先定义好的，用于存储旅游相关信息的模型，包含了诸如旅游景点的各种属性字段
from app.models import TravelInfo
# getNowTime 可能用于获取当前的时间信息
from app.utils.getHomeData import getNowTime
# 导入了 Python 标准库中的 json 模块，用于处理 JSON 格式的数据，在这个函数中会用它来解析存储为字符串形式的 JSON 数据
# （如图片列表和评论字段的数据），使其能以 Python 数据结构（如列表、字典等）的形式在代码中被处理。
import json

def getTravelById(id):
    # 这行代码使用了 Django 的模型管理器（objects）的 get 方法，尝试从 TravelInfo 模型对应的数据库表中获取一条记录，
    # 筛选条件是记录的 id 字段值等于传入的 id 参数值。如果能找到对应的记录，就将其赋值给 travel 变量，
    # 这个 travel 变量此时代表着从数据库中获取到的一条具体的旅游信息记录对应的模型实例，通过它可以访问和操作该条记录的各个字段属性。
    # 不过需要注意的是，如果根据给定的 id 找不到对应的记录，这个语句会抛出 DoesNotExist 异常，
    travel = TravelInfo.objects.get(id=id)
    # 这里假设 TravelInfo 模型中的 img_list 字段存储的数据是 JSON 格式的字符串
    # （比如它可能原本存储的是一个图片文件名列表或者图片链接列表等，以 JSON 字符串形式保存），
    # 通过 json.loads 函数将这个字符串解析为 Python 中的实际数据结构,并重新赋值给 img_list 字段，
    # 这样后续在代码中就能以 Python 列表的形式方便地对图片相关信息进行操作，比如遍历、添加或删除元素等。
    travel.img_list = json.loads(travel.img_list)
    # 和处理 img_list 字段类似，comments 字段也存储的是 JSON 格式的字符串（用于保存用户对旅游景点的多条评论信息），
    # 使用 json.loads 函数将其转换为 Python 可处理的数据结构
    travel.comments = json.loads(travel.comments)

    return travel
# 其主要功能是向旅游信息中添加用户评论
def addComments(commentData):
    # commentData 应该是一个字典类型的数据结构，里面包含了与评论相关的各种信息，比如评论的作者（author）、
    # 评论的内容（content）、评论的日期（date）、评论的评分（score）以及评论者对应的用户 id（authorId）等
    # 'author': author,
    # 'content': content,
    # 'date': date,
    # 'score': score
    # authorId
    # 调用 getNowTime 函数，根据其函数名推测它会返回当前时间的年、月、日信息，
    # 这里通过解包的方式将返回的三个值分别赋值给 year、month、day 变量，以便后续用于构建评论的时间戳信息，记录评论是在什么时间发表的。
    year,month,day = getNowTime()
    # 从传入的 commentData 字典中获取代表旅游信息的对象,是 TravelInfo 模型的一个实例，对应数据库中的一条旅游景点记录
    # 并赋值给 travelInfo 变量，后续所有关于旅游信息中评论添加以及相关字段更新的操作都会基于这个实例来进行
    travelInfo = commentData['travelInfo']
    # 这部分代码向 travelInfo 模型实例的 comments 字段所对应的列表
    # （前面在 getTravelById 函数中应该已经将其从 JSON 字符串解析为 Python 列表结构了）中添加一条新的评论信息。
    # 新评论信息以字典形式表示,这样就将新的评论数据添加到了该旅游景点的评论列表中，为后续保存更新做准备。
    travelInfo.comments.append({
        'author':commentData['userInfo'].username,
        'score':commentData['rate'],
        'content':commentData['content'],
        'date':str(year) + '-' + str(month) + '-' + str(day),
        'userId':commentData['userInfo'].id,
    })
    # 由于 TravelInfo 模型中的 comments 字段在数据库中存储的形式应该是 JSON 格式的字符串，所以在添加完新评论后，
    # 需要使用 json.dumps 函数将更新后的 Python 列表结构（包含了新添加的评论）再次转换为 JSON 字符串形式，
    # 以便能正确地存储回数据库中对应的字段里，保持数据格式的一致性和兼容性。
    travelInfo.comments = json.dumps(travelInfo.comments)
    # 和处理 comments 字段类似，对 travelInfo 模型实例的 img_list 字段也进行同样的操作，将其转换为 JSON 字符串形式
    # （虽然在这个添加评论的函数里并没有对图片列表做实际的修改，但可能为了保证数据存储格式的统一以及防止之前解析操作改变了存储格式等原因，
    # 进行了这一步重新序列化的操作），方便后续保存到数据库中。
    travelInfo.img_list = json.dumps(travelInfo.img_list)
    # 最后调用 travelInfo 模型实例的 save 方法，这个方法是 Django 模型自带的用于将模型实例的当前状态
    # （包括对各个字段的修改，如这里添加了新评论以及重新序列化后的字段值等）保存到对应的数据库表中，实现对数据库记录的更新操作，
    # 确保新添加的评论信息以及其他相关字段的更改能够持久化存储，供后续查询和使用。
    travelInfo.save()